#ifndef _GRAPHCOLORING_H_ 
#define _GRAPHCOLORING_H_ 

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
#include <math.h> 
#include <cuda_runtime_api.h> 
#include <cuda.h> 
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;


// assume the number of colors would not exceed 256 based on the preliminary results
// to save memory. 
const int TEMP_COLOR_LENGTH = 256;//1024;		

const int CONFLICT_BLOCK_SIZE = 256;


#ifdef __cplusplus 
	#define CHECK_EXT extern "C" 
#else 
	#define CHECK_EXT 
#endif 

CHECK_EXT void cudaGraphColoring(int *adjacentList, int *boundaryList, int *graphColors, int *degreeList, 
								 int *conflict, int boundarySize, int maxDegree, int graphSize, 
								 int passes, int subsizeBoundary, int _gridSize, int _blockSize, 
								 int *startPartitionList, int *endPartitionList, int *randomList, int numRand, 
								 int ordering, int recoloring, int sync, int recolor_order);


#endif // _GRAPHCOLORING_H_ 

